home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Disc to the Future 2
/
Disc to the Future Part II Programmer's Reference (Wayzata Technology)(6013)(1992).bin
/
MAC
/
THINKC
/
4_0
/
PLOTCICN
/
DRAW_CIC.C
Wrap
C/C++ Source or Header
|
1990-03-05
|
4KB
|
149 lines
/***********************************************************************************/
/* Draw CICN.c */
/* BY ALLEN PRESCOTT */
/* MARCH 1990 */
/***********************************************************************************/
/*
INCLUDE FILES
*/
#include "HyperXCMD.h"
#include <SetUpA4.h>
#include <Color.h>
/*
FUNCTION PROTOTYPES
*/
pascal void main(XCmdBlockPtr paramPtr);
int candocolor();
/*
MAIN CODE SEGMENT
*/
pascal void main(XCmdBlockPtr paramPtr)
{
/*
LOCAL VARIABLES
*/
Str255 paramvalue; /* STRING FOR RECEIVING PARAMETERS */
Point myPt; /* POINT FOR TOPLEFT COORDINATE */
long top,left,tid; /* LONGS TO CONVERT COORDINATE INTO */
int theID; /* ID OF CICN RESOURCE */
CIconHandle theCICN; /* HANDLE FOR CICN RESOURCE */
CGrafPort myCPort; /* COLOR GRAFPORT TO DRAW INTO */
GrafPort oldPort; /* OLD PORT TO SAVE */
ResType theType; /* TYPE OF RESOURCE FOR GETRESINFO */
Rect theRect; /* RECT TO PLOT CICN INTO */
/*
SET UP THE GLOBALS. EVEN THOUGH WE DO NOT USE ANY I ALWAYS DO THIS JUST IN CASE
*/
RememberA0();
SetUpA4();
/*
START OF CODE
*/
/*
MAKE SURE THAT COLOR QUICKDRAW IS AVAILABLE
*/
if (!candocolor())
{
SendCardMessage(paramPtr,(StringPtr)"\pput \"-- Plot CICN ERROR, color not available\"");
SysBeep(1);
return;
}
/*
WE MUST HAVE AT LEAST THREE PARAMETERS
*/
if ( paramPtr->paramCount < 3 )
{
SendCardMessage(paramPtr,(StringPtr)"\pput \"-- Plot CICN ERROR, wrong number of parameters\"");
SysBeep(1);
return;
}
/* PARAMETER 1(INDEX 0) IS THE LEFT EDGE OF THE CICN IN LOCAL COORDINATES */
ZeroToPas(paramPtr,(unsigned char *)*(paramPtr->params[0]),(StringPtr)¶mvalue);
StringToNum(paramvalue,&left);
/* PARAMETER 2(INDEX 1) IS THE TOP OF THE CICN IN LOCAL COORDINATES */
ZeroToPas(paramPtr,(unsigned char *)*(paramPtr->params[1]),(StringPtr)¶mvalue);
StringToNum(paramvalue,&top);
/* IF PARAMETER 3 IS NOT THE EMPTY STRING THEN WE USE IT TO LOCATE THE CICN */
if (**paramPtr->params[2] != 0)
{
ZeroToPas(paramPtr,(unsigned char *)*(paramPtr->params[2]),(StringPtr)¶mvalue);
SetResLoad(FALSE);
theCICN = (CIconHandle)GetNamedResource('cicn',paramvalue);
SetResLoad(TRUE);
if (theCICN == 0L)
{
SendCardMessage(paramPtr,(StringPtr)"\pput \"-- Plot CICN ERROR, cannot get color icon resource\"");
SysBeep(1);
return;
}
GetResInfo(theCICN,&theID,theType,paramvalue);
ReleaseResource(theCICN);
}
/* IF PARAMETER 3 IS THE EMPTY STRING THEN WE USE PARAMETER 4 AS THE ID OF THE CICN */
else
{
if ( paramPtr->paramCount < 4 )
{
SendCardMessage(paramPtr,(StringPtr)"\pput \"-- Plot CICN ERROR, invalid color icon resource name\"");
SysBeep(1);
return;
}
ZeroToPas(paramPtr,(unsigned char *)*(paramPtr->params[3]),(StringPtr)¶mvalue);
StringToNum(paramvalue,&tid);
theID = tid;
}
/* GET THE CICN RESOURCE */
theCICN = GetCIcon(theID);
if (theCICN == 0L)
{
SendCardMessage(paramPtr,(StringPtr)"\pput \"-- Plot CICN ERROR, cannot get color icon resource\"");
SysBeep(1);
return;
}
/*
CONVERT THE COORDINATES TO GLOBAL SO WE CAN KEEP THEM IN OUR NEW COORDINATE SYSTEM
*/
SetPt(&myPt,left,top);
LocalToGlobal(&myPt);
/*
OPEN A COLOR PORT TO DRAW THE COLOR ICON INTO
*/
GetPort(&oldPort);
OpenCPort(&myCPort);
SetPort(&myCPort);
/*
CONVERT THE COORDINATES BACK TO LOCAL AND WE ARE READY TO PLOT
*/
GlobalToLocal(&myPt);
SetRect(&theRect,myPt.h,myPt.v,myPt.h+32,myPt.v+32);
PlotCIcon(&theRect,theCICN);
/*
CLEAN UP AND WE ARE DONE
*/
DisposCIcon(theCICN);
CloseCPort(&myCPort);
SetPort(&oldPort);
/*
RESTORE THE REGISTERS BEFORE RETURNING
*/
RestoreA4();
}
/*****************************************************************************/
/*
FUNCTION TO DETERMINE IF COLOR QUICKDRAW IS PRESENT AND THE MODE IS AT
LEAST 16 COLORS
*/
int candocolor()
{
SysEnvRec theworld;
OSErr err;
err = SysEnvirons(2, &theworld);
if (err != noErr)
return(FALSE);
if (theworld.hasColorQD != TRUE)
return(FALSE);
else
return(TRUE);
}